<?php

require_once ("Validation.php");

	class RegisterView{

		const NO_MESSAGE = "no_message";		
		const REGISTER = "register";
		const REGISTER_FAILED = "register_failed";
		const USERNAME_TAKEN = "username_taken";
		const USERNAME_ERROR = "username_error";
		const USERNAME_CHAR_ERROR = "username_char_error";
		const PASSWORD_CHAR_ERROR = "password_char_error";
		const PASSWORD_ERROR = "password_error";	
		const PASSWORD_COMPARE = "password_compare";
		const INFO = "info";				
		
		private static $form_username = "form_username";
		private static $form_password = "form_password";
		private static $form_password2 = "form_password2";		
		private static $register_button = "register_button";
		private static $abort_button = "abort_button";

		
		/**
		 * Skapar ett registreringsformulär
		 * @return string HTML
		 */	
		public function DoRegisterBox() {
								
			return "<div id='registerform'>
			<p>Användarnamn: </p><input type='text' name=".self::$form_username." />
			<p>Lösenord: </p><input type='password' name=".self::$form_password." /><br>
			<p>Upprepa lösenord: </p><input type='password' name=".self::$form_password2." />
			<div id='button_div'>	
			<button type='submit' name=".self::$register_button.">Registrera</button>
			<button type='submit' name=".self::$abort_button." >Avbryt</button>				
			</div>
			</div>";
		}
		
		/**
		 * Hanterar felmeddelanden
		 * @param string or array
		 * @return string HTML
		 */			
		public function DoMessageBox($message){
				
			//Fulfix, gör om eventuella strängar til vektorer.
			if(is_string($message)){
				$messageTemp = array();
				$messageTemp[] = $message;		
			}
			if(isset($messageTemp)){
				$message = $messageTemp;
			}

			$output_message = "<ul>";
			
			foreach ($message as $value){
					
				switch ($value){
					
					case "no_message":
						break;
					case "register":
						$output_message .= "<li class='green'>Registrering lyckades av: ".$this->GetUserName()."</li><li><a href=?Log_in=true>Logga in</a></li>";
						break;
					case "register_failed":
						$output_message .= "<p class='red'>Registrering misslyckades</p>";					
						break;
					case "username_taken":
						$output_message .= "<li>Användarnamn: ".$this->GetUserName() ." är upptaget</li>";
						break;																
					case "username_error":
						$output_message .= "<li>Måste ange ett användarnamn</li>";
						break;
					case "username_char_error":
						$output_message .= "<li>Användarnamnet innehåller ogiltiga tecken</li>";
						break;						
					case "password_error":
						$output_message .= "<li>Lösenordet måste vara minst 6 tecken långt</li>";
						break;
					case "password_char_error":
						$output_message .= "<li>Lösenordet får bara innehålla bokstäver och siffror och vara max 15 tecken långt.</li>";
						break;										
					case "password_compare":
						$output_message .= "<li>Lösenorden måste ara identiska</li>";
						break;
					case "info":
						$output_message .= "<p>Registrera ny användare</p>";
						break;																					
				}
			}
			$output_message .= "</ul>";
			return "<div id='messagediv'>$output_message</div>";	
		}

		/**
		 * Validerar användarnamn och lösenord
		 * @return array med felmeddelanden
		 */
		public function Validate(){
			
			$val = new Validation();
			
			$messagearray = array();
			
			if(!$val->ValidateUserName($this->GetUserName())){
				$messagearray[] = RegisterView::USERNAME_ERROR; 
			}
			
			if(!$val->ValidateUserNameChar($this->GetUserName())){
				$messagearray[] = RegisterView::USERNAME_CHAR_ERROR; 
			}

			if(!$val->ValidatePassword($this->GetPassword())){
				$messagearray[] = RegisterView::PASSWORD_ERROR; 
			}
			
			if(!$val->ValidatePasswordChar($this->GetPassword())){
				$messagearray[] = RegisterView::PASSWORD_CHAR_ERROR; 
			}

			if(!$val->ComparePassword($this->GetPassword(), $this->GetPassword2())){
				$messagearray[] = RegisterView::PASSWORD_COMPARE; 
			}
			
			return $messagearray;																						
		}
		
		/**
		 * Returnerar det ifyllda användarnamnet
		 * @return string användarnamn
		 */
		public function GetUserName(){
			if ($this->TriedToRegister()){
				return $_POST[self::$form_username];
			}		
		}
		
		/**
		 * Returnerar lösenord om det är längre än 6 tecken
		 * @return string lösenord
		 */	
		public function GetPassword(){
			if ($this->TriedToRegister()){
				return $_POST[self::$form_password];
			}
		}
		
		public function GetPassword2(){
			if ($this->TriedToRegister()){
				return $_POST[self::$form_password2];
			}
		}		
		
		/**
		 * Kontrollerar om användaren tryckt på register-knappen.
		 * @return boolean
		 */	
		public function TriedToRegister(){
				return isset($_POST[self::$register_button]);
		}
		
		public function TriedToAbort(){
				return isset($_POST[self::$abort_button]);
		}		
								
		
	}
